/******************************************************************************* Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for a project. Description: This file contains the "main" function for a project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all modules in the system *******************************************************************************/ // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "definitions.h" // SYS function prototypes int delay_Clock = 200000000; //200MHz int tempo_speed = 80; //テンポ=80 int T4 = 750; //四分音符の時間(長さ) T4 = 750 [msec] //T4 = 60 * 1000 / 80; void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } void BuzFreq(volatile int Freq, volatile float Duty) //PWM周波数(Freq) と デューティ(Duty)の設定関数 { volatile int myPR; //PWM周期のレジスタ値( = PR2 at Timer2) volatile int myDuty; //PWM出力ON時間に相当するレジスタ値(= OC1RS at OC1) volatile float PS_T2 = 16; //タイマ2のプリスケール値 TMR2_Stop();//タイマ2ストップ //PWM周波数設定 //PR(PRレジスタ値) = Fpbclk(ペリフェラルバスクロック周波数)/Fpwm(PWM周波数)/タイマプリスケール値 - 1; myPR = (int)(100000000/Freq/PS_T2 -1); TMR2_PeriodSet(myPR); //周期レジスタ設定 myDuty = (int)((float)PR2 * Duty); OCMP1_CompareSecondaryValueSet(myDuty); //OC1のデューティ設定 // OC1RS = (int)((float)PR2 * Duty); TMR2_Start(); } void ClosePWM(void) { TMR2_Stop(); //タイマ2ストップ } void Do_C4(void) //第四オクターブ ド //C4 { BuzFreq(261.63,0.5);//ド //261.63Hz } void Re_D4(void) //第四オクターブ レ //D4 { BuzFreq(293.67,0.5); //レ //293.67Hz } void Mi_E4(void) //第四オクターブ ミ //E4 { BuzFreq(329.63,0.5); //ミ //329.63Hz } void Fa_F4(void) //第四オクターブ ファ //F4 { BuzFreq(349.23,0.5); //ファ //349.23Hz } void _SoL1(void) //第四オクターブ ソ //G4 { BuzFreq(392.00,0.5); //ファ //349.23Hz } void La_A4(void) //第四オクターブ ラ //A4 { BuzFreq(440.00,0.7); //ラ //440.00Hz } void La_sharpA4(void) //第四オクターブ #ラ(嬰イ) //A#4 { BuzFreq(466.16,0.7); //ラ //466.16Hz } void Si_B4(void) //第四オクターブ シ //B4 { BuzFreq(493.88,0.4); //シ //493.88Hz } void Do_C5(void) //第五オクターブ ド //C5 { BuzFreq(523.23,0.5); //ド //523.23Hz } void Re_D5(void) //第五オクターブ レ { BuzFreq(587.34,0.5); //レ //587.34Hz } void noSound(void) { ClosePWM(); delay_ms(50); } // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all modules */ SYS_Initialize ( NULL ); OCMP1_Enable (); //OC1イネーブル while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); //第1行: うさぎ追いし かの山 ----------------------------------------------------------- //-----第一小節 Fa_F4(); //ファ delay_ms(T4); //四分音符長さ noSound(); Fa_F4(); //ファ delay_ms(T4); //四分音符長さ noSound(); Fa_F4(); //ファ delay_ms(T4); //四分音符長さ noSound(); //------第二小節 _SoL1(); delay_ms(1125);//付点付四分音符長さ // delay_ms(T4*1.5);//付点付四分音符長さ noSound(); La_A4(); //ラ delay_ms(T4/2); //八分音符長さ noSound(); _SoL1(); delay_ms(750); // delay_ms(T4); //四分音符長さ noSound(); //-------第三小節 La_A4(); //ラ delay_ms(T4); //四分音符長さ noSound(); La_A4(); //ラ delay_ms(T4); //四分音符長さ noSound(); La_sharpA4(); //シ (#ラ) delay_ms(T4); //四分音符長さ noSound(); //--------第四小節 Do_C5(); //ド delay_ms(T4*2); //二分音符長さ noSound(); delay_ms(T4); //四分休符 //第2行 こぶな釣りし かの川 --------------------------------------------------------- //--------第一小節 La_sharpA4(); //#ラ delay_ms(T4); noSound(); Do_C5(); //ド delay_ms(T4); //四分音符長さ noSound(); Re_D5(); //レ delay_ms(T4); //四分音符長さ noSound(); //---------第二小節 La_A4(); //ラ delay_ms(T4*1.5);//付点付四分音符長さ noSound(); La_sharpA4(); //シ (#ラ) delay_ms(T4/2); //八分音符長さ noSound(); La_A4(); //ラ delay_ms(T4);//付点付四分音符長さ noSound(); //----------第三小節 _SoL1(); delay_ms(750); // delay_ms(T4);//付点付四分音符長さ noSound(); _SoL1(); delay_ms(750); // delay_ms(T4);//付点付四分音符長さ noSound(); Mi_E4(); //第四オクターブ ミ //E4 delay_ms(T4);//付点付四分音符長さ noSound(); //-----------第四小節 Fa_F4(); //ファ delay_ms(T4*2); //二分音符長さ noSound(); delay_ms(T4); //四分休符 //第3行 夢は今も めぐりて //-----------第一小節 _SoL1(); delay_ms(T4/2);//八分音符長さ noSound(); Fa_F4(); //ファ delay_ms(T4/2); //八分音符長さ noSound(); _SoL1(); delay_ms(T4);//四分音符長さ noSound(); Do_C4(); //ド delay_ms(T4);//四分音符長さ noSound(); //------------第二小節 Fa_F4(); //ファ delay_ms(T4/2); //八分音符長さ noSound(); _SoL1(); delay_ms(T4/2);//八分音符長さ noSound(); La_A4(); //ラ delay_ms(T4);//四分音符長さ noSound(); La_A4(); //ラ delay_ms(T4);//四分音符長さ noSound(); //------------第三小節 La_sharpA4(); //シ (#ラ) delay_ms(T4/2); // 八分音符長さ noSound(); La_A4(); //ラ delay_ms(T4/2);//八分音符長さ noSound(); La_sharpA4(); //シ (#ラ) delay_ms(T4*1.5); //付点付四分音符長さ noSound(); Re_D5(); //レ delay_ms(T4/2); //八分音符長さ noSound(); //-----------第四小節 Do_C5(); //ド delay_ms(T4/2); //二分音符長さ noSound(); La_sharpA4(); //シ (#ラ) delay_ms(T4/2); //八分音符長さ noSound(); La_A4(); //ラ delay_ms(T4);//四分音符長さ noSound(); delay_ms(T4); //四分休符 //第4行 忘れがたき 故郷(ふるさと) //---------第一小節 Do_C5(); //ド delay_ms(T4); //四分音符長さ noSound(); Do_C5(); //ド delay_ms(T4); //四分音符長さ noSound(); Do_C5(); //ド delay_ms(T4); //二分音符長さ noSound(); //----------第二小節 Fa_F4(); //ファ delay_ms(T4*1.5); //付点付四分音符長さ noSound(); _SoL1(); delay_ms(T4/2);//八分音符長さ noSound(); La_A4(); //ラ delay_ms(T4);//四分音符長さ noSound(); //----------第三小節 La_sharpA4(); //シ (#ラ) delay_ms(T4); //四分音符長さ noSound(); La_sharpA4(); //シ (#ラ) delay_ms(T4); //四分音符長さ noSound(); _SoL1(); delay_ms(T4);//四分音符長さ noSound(); //-----------第四小節 Fa_F4(); //ファ delay_ms(T4*2); //二分音符長さ noSound(); delay_ms(T4); //四分休符 ///-------------------------------------------------------------------------------- delay_ms(3000); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */